/*
 * 传感器模块实现文件
 * 实现所有传感器的读取和处理功能
 */

#include "sensor_module.h"
#include <DHT.h>
#include <Wire.h>
#include <Adafruit_SSD1306.h>
#include <BH1750.h>
#include <Adafruit_CCS811.h>

// 传感器引脚定义
#define DHT_PIN 4
#define DHT_TYPE DHT22
#define SOIL_MOISTURE_PIN 34

// 传感器对象
DHT dht(DHT_PIN, DHT_TYPE);
BH1750 lightMeter;
Adafruit_CCS811 ccs;
Adafruit_SSD1306 display(128, 64, &Wire, -1);

SensorModule::SensorModule() {
  // 构造函数
}

void SensorModule::begin() {
  // 初始化传感器
  dht.begin();
  lightMeter.begin();
  
  if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
    Serial.println(F("SSD1306 allocation failed"));
  }
  
  if(!ccs.begin()){
    Serial.println("Failed to start CCS811 sensor! Please check your wiring.");
  }
  
  // 初始化显示
  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(SSD1306_WHITE);
  display.setCursor(0, 0);
  display.println("Sensor Module");
  display.println("Initialized");
  display.display();
  delay(2000);
}

void SensorModule::readAllSensors() {
  // 读取温湿度传感器
  sensorData.temperature = dht.readTemperature();
  sensorData.humidity = dht.readHumidity();
  
  // 读取土壤湿度传感器
  sensorData.soilMoisture = analogRead(SOIL_MOISTURE_PIN);
  
  // 读取光照传感器
  sensorData.lightIntensity = lightMeter.readLightLevel();
  
  // 读取空气质量传感器
  if(ccs.available()){
    if(!ccs.readData()){
      sensorData.co2Level = ccs.geteCO2();
      sensorData.tvocLevel = ccs.getTVOC();
    }
  }
}

SensorData SensorModule::getData() {
  return sensorData;
}

void SensorModule::displayData() {
  display.clearDisplay();
  display.setCursor(0, 0);
  display.print("Temp: ");
  display.print(sensorData.temperature);
  display.println(" C");
  
  display.print("Humidity: ");
  display.print(sensorData.humidity);
  display.println(" %");
  
  display.print("Soil: ");
  display.println(sensorData.soilMoisture);
  
  display.print("Light: ");
  display.print(sensorData.lightIntensity);
  display.println(" lx");
  
  display.print("CO2: ");
  display.print(sensorData.co2Level);
  display.println(" ppm");
  
  display.display();
}

bool SensorModule::checkAlerts() {
  bool alert = false;
  
  // 检查温度异常
  if (sensorData.temperature > TEMP_THRESHOLD_HIGH || sensorData.temperature < TEMP_THRESHOLD_LOW) {
    alert = true;
  }
  
  // 检查湿度异常
  if (sensorData.humidity > HUMIDITY_THRESHOLD_HIGH || sensorData.humidity < HUMIDITY_THRESHOLD_LOW) {
    alert = true;
  }
  
  // 检查土壤湿度过低
  if (sensorData.soilMoisture < SOIL_MOISTURE_THRESHOLD_LOW) {
    alert = true;
  }
  
  // 检查光照过低
  if (sensorData.lightIntensity < LIGHT_THRESHOLD_LOW) {
    alert = true;
  }
  
  // 检查CO2浓度过高
  if (sensorData.co2Level > CO2_THRESHOLD_HIGH) {
    alert = true;
  }
  
  return alert;
}